#include "rfid.h"
#include <string.h>

// RFID卡片数据存储区
static RFIDCardData cards[MAX_RFID_CARD_COUNT];
static uint16_t cardCount = 0;

// RFID模块初始化
SystemStatus RFID_Init(void)
{
    // 清空卡片数据
    memset(cards, 0, sizeof(cards));
    cardCount = 0;
    
    // TODO: 初始化RFID读卡器硬件
    
    return SYSTEM_OK;
}

// 添加卡片
SystemStatus RFID_Add(const uint8_t *card_id, uint16_t *id)
{
    if (cardCount >= MAX_RFID_CARD_COUNT) {
        return SYSTEM_FULL;
    }
    
    // 检查卡片是否已存在
    for (uint16_t i = 0; i < MAX_RFID_CARD_COUNT; i++) {
        if (cards[i].valid && 
            memcmp(cards[i].card_id, card_id, RFID_CARD_ID_LENGTH) == 0) {
            return SYSTEM_ERROR;
        }
    }
    
    // 查找空闲位置
    uint16_t freeIndex;
    for (freeIndex = 0; freeIndex < MAX_RFID_CARD_COUNT; freeIndex++) {
        if (!cards[freeIndex].valid) {
            break;
        }
    }
    
    // 保存卡片数据
    cards[freeIndex].id = freeIndex;
    memcpy(cards[freeIndex].card_id, card_id, RFID_CARD_ID_LENGTH);
    cards[freeIndex].privilege = 1;  // 默认普通用户权限
    cards[freeIndex].register_time = 0;  // TODO: 添加实时时钟支持
    cards[freeIndex].valid = true;
    
    *id = freeIndex;
    cardCount++;
    
    return SYSTEM_OK;
}

// 删除卡片
SystemStatus RFID_Delete(uint16_t id)
{
    if (id >= MAX_RFID_CARD_COUNT || !cards[id].valid) {
        return SYSTEM_NOT_FOUND;
    }
    
    // 清除卡片数据
    memset(&cards[id], 0, sizeof(RFIDCardData));
    cardCount--;
    
    return SYSTEM_OK;
}

// 卡片匹配
SystemStatus RFID_Match(const uint8_t *card_id, uint16_t *id)
{
    for (uint16_t i = 0; i < MAX_RFID_CARD_COUNT; i++) {
        if (cards[i].valid && 
            memcmp(cards[i].card_id, card_id, RFID_CARD_ID_LENGTH) == 0) {
            *id = i;
            return SYSTEM_OK;
        }
    }
    
    return SYSTEM_NOT_FOUND;
}

// 获取已注册卡片数量
uint16_t RFID_GetCount(void)
{
    return cardCount;
}

// 清空所有卡片
SystemStatus RFID_Clear(void)
{
    memset(cards, 0, sizeof(cards));
    cardCount = 0;
    return SYSTEM_OK;
}

// RFID模块进入低功耗模式
SystemStatus RFID_EnterLowPower(void)
{
    // TODO: 实现RFID读卡器低功耗模式
    return SYSTEM_OK;
}

// RFID模块退出低功耗模式
SystemStatus RFID_ExitLowPower(void)
{
    // TODO: 实现RFID读卡器唤醒
    return SYSTEM_OK;
} 